Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.12.2014, 19:36
Новичок на форуме
Отправить личное сообщение для nadda Посмотреть профиль Найти все сообщения от nadda
 
Регистрация: 26.06.2013
Сообщений: 9

XMLHttpRequest file upload
Добрый день.
Помогите плз решить такую проблемку.
Имеется форма, поля которой формируются динамически, и обрабатываются JS. Проблем небыло пока не понадобилось добавить поле типа файл. Как ни бился - не смог загрузить файл на сервер. Буду очень благодарен за подсказку. Вот скрипт - обработчик формы:
function createObject() {
var request_type;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
    request_type = new ActiveXObject("Microsoft.XMLHTTP");
} else {
    request_type = new XMLHttpRequest();
}
return request_type;
}
var http = createObject();

function sendForm(){
var len = document.my_form.elements.length-1;
var formFields = [];
for (var i = 0; i < len; i++) {
     var val = document.zay_form.elements[i].value;
     var key = document.zay_form.elements[i].name;
     formFields.push(key + '=' + val);
}
http.open("POST", '', true);
http.onreadystatechange = echoResponse;
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send(formFields.join('&'));
}


и сама форма:

<form action="" name="my_form" onsubmit="sendForm(this.name);return false;">
<input name="action" type="hidden" value="new" />
<input name="f_1" type="text" value="1" />
<input name="f_2" type="text" value="2" />
<input name="f_3" type="text" value="3" />
<input type="file" name="my_file" />
<button type="submit">OK</button>
</form>

Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 24.12.2014, 19:42
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

А что, собственно, выдают вкладки "консоль" и "сеть" в браузере? Есть какие-то ошибки и на тот ли адрес отправляются данные?
Ответить с цитированием
  #3 (permalink)  
Старый 24.12.2014, 22:58
Новичок на форуме
Отправить личное сообщение для nadda Посмотреть профиль Найти все сообщения от nadda
 
Регистрация: 26.06.2013
Сообщений: 9

Если без инпута файл, то вываливается пост-массив... ну как и полагается....
Ответить с цитированием
  #4 (permalink)  
Старый 24.12.2014, 23:11
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

вкратце - используйте FormData. это очень просто. гугл расскажет, вместе со сниппетами. удачи!
Ответить с цитированием
  #5 (permalink)  
Старый 25.12.2014, 10:13
Новичок на форуме
Отправить личное сообщение для nadda Посмотреть профиль Найти все сообщения от nadda
 
Регистрация: 26.06.2013
Сообщений: 9

я пробовал использовать formData, но почему-то вместо пост-массива получаю полный вид страницы с которой отправлена форма.
Ответить с цитированием
  #6 (permalink)  
Старый 25.12.2014, 10:45
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Форма должна содержать следующие параметры: method="post" enctype="multipart/form-data" . Она определяет, какой тип содержимого использовать при отправке формы
Если в форме <input type="file" name="my_file" /> , то на сервере этот файл доступен не через $_POST['my_file'] , а через $_FILES['my_file']
Ответить с цитированием
  #7 (permalink)  
Старый 25.12.2014, 10:58
Новичок на форуме
Отправить личное сообщение для nadda Посмотреть профиль Найти все сообщения от nadda
 
Регистрация: 26.06.2013
Сообщений: 9

естественно... вот код приемника:
print_r($_POST);
        if($_FILES){
            print_r($_FILES);
        }


причем если форму отправить как обычно, с перезагрузкой, то все прекрасно работает....
Ответить с цитированием
  #8 (permalink)  
Старый 25.12.2014, 13:09
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Файл загружается на сервер без перезагрузки страницы.
<form method="post" enctype="multipart/form-data" action="" target="upload_target">
  <input name="action" type="hidden" value="new" />
  <input name="f_1" type="text" value="1" />
  <input name="f_2" type="text" value="2" />
  <input name="f_3" type="text" value="3" />
  <input type="file" name="my_file" />
  <button type="submit">OK</button>
  <iframe id="upload_target" name="upload_target" src="" style="width: 0; height: 0; border: none;"></iframe>
</form>

Здесь onsubmit не надо.
Ответить с цитированием
  #9 (permalink)  
Старый 25.12.2014, 13:48
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

Файл летит вместе с остальными данными

$form = $("#con");
 $form.on("submit", function() {
var formData = new FormData($(this)[0]);
 $.ajax({
                url: window.location.pathname,
                type: 'POST',
                data: formData,
                async: false,
                success: function (data) {
                    alert(data)
                },
                cache: false,
                contentType: false,
                processData: false
});
 return false;
});
Ответить с цитированием
  #10 (permalink)  
Старый 25.12.2014, 14:06
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от nice_try
var formData = new FormData($(this)[0]);
Гениально! Обернуть this для того, чтобы потом его извлечь! jQuery головного мозга
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
swfupload не грузит в опера работает хроме в чем ошибка? kolobok416 Flash 0 02.06.2014 23:01
При нажатии Обзор... Видит все подряд файлы, jQuery File Upload Petja jQuery 3 04.09.2013 12:34
XMLHTTPrequest upload krasovsky Javascript под браузер 5 26.02.2013 19:48
JQuery file upload plugin проверка vyaceslav.kr jQuery 0 11.09.2012 00:50
jQuery multi file upload УБИВАЕТ explorer gagagogo jQuery 5 07.08.2009 09:43